/*************************************************************************
> File Name: greedy.cpp
> Author: icebear
> Mail: 3322366195@qq.com
> Created Time: 2024-01-16 19:12:37
> Description:
135.分发糖果
n 个孩子站成一排。给你一个整数数组 ratings 表示每个孩子的评分。

你需要按照以下要求，给这些孩子分发糖果：

每个孩子至少分配到 1 个糖果。
相邻两个孩子评分更高的孩子会获得更多的糖果。
请你给每个孩子分发糖果，计算并返回需要准备的 最少糖果数目 。
************************************************************************/

// 思路：贪心算法 左边贪心 右边贪心 取满足条件最大值

#include <vector>
using namespace std;

class Solution
{
public:
    int candy(vector<int> &ratings)
    {
        vector<int> candys(ratings.size(), 1);
        // 左规则
        for (int i = 1; i < ratings.size(); i++)
        {
            if (ratings[i] > ratings[i - 1])
            {
                candys[i] = candys[i - 1] + 1;
            }
        }
        // 又规则
        for (int i = ratings.size() - 2; i >= 0; i--)
        {
            if (ratings[i] > ratings[i + 1])
            {
                candys[i] = max(candys[i + 1] + 1, candys[i]);
            }
        }
        /* 统计结果 */
        int result = 0;
        for (int i = 0; i < candys.size(); i++)
            result += candys[i];
        return result;
    }
};
